// ============================== 导入依赖 ============================== //

import util from './util'

// ============================== 状态集 ============================== //

const state = {
  // —————————————————————————————— 数据 —————————————————————————————— //

  /**
   * 首要开关
   *
   * 1. 初始化完成时调用
   * 2. 提交后刷新时调用
   */
  MAIN_START: '', // 'startInfo' 或 'startList' 或 'startOne' 或 ''

  /**
   * 接口
   */
  API: {
    ...util.API,
    validBaseParam(baseParam, state, root) {
      return true
    },
    transBaseParam(baseParam, context) {
      return baseParam
    },
    async getBase(baseParam, TIP) {
      //
    },
    transBase(obj, context) {
      return obj
    },
  },

  /**
   * 映射
   */
  MAP: {
    CACHE: 'COMMON', // 内核缓存空间 (CORE.mixStore() 时生成 CORE.CACHE.COMMON = {} )

    tipForceWord: false, // 提示强制用词语生成
  },

  /**
   * 字典
   */
  DICT: {
    //
  },

  /**
   * 基础参数
   */
  baseParam: {},

  // —————————————————————————————— 开关 —————————————————————————————— //

  /**
   * 远程基础开关
   */
  needBase: false,

  /**
   * 基础就绪开关
   */
  readyBase: false,
}

// ============================== 计算属性 ============================== //

const getters = {
  /**
   * 初始化完成 (可覆盖，依赖模块完成后，再调用 MAIN_START)
   */
  inited: (state) => state.readyBase && true,

  /**
   * 自定义计算属性 (可覆盖)
   */
  GETTER: () => ({}),
}

// ============================== 同步更新 ============================== //

const mutations = {
  // —————————————————————————————— 监听 —————————————————————————————— //

  /**
   * 开始远程基础
   */
  startBase(state) {
    if (state.API.validBaseParam(state.baseParam, state, this)) {
      util.start('Base', state)
    }
  },

  /**
   * 完成远程基础
   */
  completeBase(state, Base) {
    if (Base) {
      if (Base.MAP) state.MAP = { ...state.MAP, ...Base.MAP }
      if (Base.DICT) state.DICT = { ...state.DICT, ...Base.DICT }
    }
    util.complete('Base', state, '')
  },

  /**
   * 终止远程基础
   */
  stopBase(state, e) {
    util.stop('Base', state, e)
  },
}

// ============================== 异步调用 ============================== //

const actions = {
  // —————————————————————————————— 基础 —————————————————————————————— //

  async remoteBase(context) {
    const { state: { API, MAP, baseParam } } = context
    const TIP = API.transTip(MAP.tipBase, this.state.API) // 拼上根模块 API 的菜单
    const myParam = await API.transBaseParam(baseParam, context)
    const obj = await API.getBase(myParam, TIP)
    return API.transBase(obj, context)
  },
}

// ============================== 导出仓库 ============================== //

export default { state, getters, mutations, actions }
